www.gusucode.com > 基于马尔科夫随机场的图像分割matlab源码。包括ICM迭代条件模式求解最大后验概率算法 > code23/matlab MRF toy examples/oneIterBP.m
% Sept. 2, 2003 billf. % maxProductFlag = 1 means max product (MAP estimate), not sum product % (MMSE estimate). function nodes = oneIterBP(nodes, maxProductFlag); % Go through every link, and transmit messages near to far % ---------------------------------------------------------------- fprintf(1, '\nDoing belief propagation for %d nodes:\n', length(nodes)); tic; % ---------------------------------------------------------------- for nearIdx = 1:length(nodes); near = nodes{nearIdx}; for linkIdx = 1:near.nLinks % - - - - - - - - - - - - - - - - - - - message = near.localEvidence; link = near.links{linkIdx}; farIdx = link.farsIndex; far = nodes{farIdx}; for link2Idx = 1:near.nLinks if (link2Idx ~= linkIdx) link2 = near.links{link2Idx}; if ~isempty(link2.farsMessageToMe) message = multMessages(message, link2.farsMessageToMe); end end; end; if (maxProductFlag) message = max(nodes{nearIdx}.links{linkIdx}.propMat... .*repmat(message,size(nodes{nearIdx}.links{linkIdx}.propMat,1),1),[],2)'; else message = (nodes{nearIdx}.links{linkIdx}.propMat * message')'; end; nodes{ farIdx }.links{ link.farsLinkToMe }.fars_NEXT_MessageToMe = message; % - - - - - - - - - - - - - - - - - - - end; fprintf(1, '.'); end; fprintf(1,'\nDone propagating beliefs: %f secs\n',toc); %------------------------------------------------------------------ % now *clock*, since we seem to do everything clocked these days %------------------------------------------------------------------ fprintf(1, 'Clocking.... '); tic for node = 1:length(nodes); for link = 1:nodes{node}.nLinks nodes{node}.links{link}.farsMessageToMe = ... nodes{node}.links{link}.fars_NEXT_MessageToMe; end; % links to this node end; % nodes fprintf(1, ' ... Done %f secs\n',toc);